{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 组合投资理论基础"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 单期，多期收益率，连续复利\n",
    "\n",
    "https://zhuanlan.zhihu.com/p/514862524\n",
    "\n",
    "https://www.zhihu.com/column/c_1335724136769540096\n",
    "\n",
    "如果把一段时间内每一期的资产价格按照时间先后顺序排列起来，将得到资产价格的时间序列。第一期为P1，后续为P2等。假设投资者在t-1时投某资产，投入价格为Pt-1，持有一期后以Pt的价格卖掉。不考虑交易成本，其单期收益率Rt的计算公式为：\n",
    "\n",
    "<img src=https://pic2.zhimg.com/80/v2-00bdd267e1dccaa97fcc824efbe5b1ed_720w.webp width=30% />\n",
    "\n",
    "\n",
    "* 多期简单收益率\n",
    "\n",
    "根据上面公式，二期的单期收益率Rt(2)为：\n",
    "\n",
    "<img src=https://pic3.zhimg.com/80/v2-785ad915adbdf911c319e8d2d25fc126_720w.webp width=30% />\n",
    "\n",
    "推导下来，多期简单收益率则为：\n",
    "\n",
    "若投资者在t-k期以价格Pt-k买入该资产，在t期卖出，则k期单期收益率Rt(k)为：\n",
    "\n",
    "<img src=https://pic3.zhimg.com/80/v2-1aff916f31ddc34c724eea356650fb06_720w.webp width=30% />\n",
    "\n",
    "\n",
    "\n",
    "* 单期与多期简单收益率的关系\n",
    "\n",
    "以两期的简单收益率为例，可以将其分解为两个单期简单收益率的乘积的形式。\n",
    "<img src=https://pic1.zhimg.com/80/v2-0d70aca1f732fc7dfbfc68d3f0148c60_720w.webp width=30% />\n",
    "\n",
    "其中 （1+Rt）*(1+Rt-1) 的概念就是复利。\n",
    "\n",
    "* 平均收益率\n",
    "\n",
    "而如果不考虑复利，也就是说每一期获得的收益都没有再投入资产中的收益就是简单的单期收益加总。\n",
    "\n",
    "$$ R_t(k)=\\sum_{j=0}^{k-1}{R_{t-j}} $$ \n",
    "\n",
    "如果只知道多期收益，要计算单期收益率的平均值，并且不考虑复利，那么公式为：\n",
    "\n",
    "$$ 算术平均收益率=\\frac{R_t(k)}{k}=\\frac{\\sum_{j=0}^{k-1}{R_{t-j}}}{k} $$\n",
    "\n",
    "如果只知道多期收益，要计算单期收益率的平均值，并且考虑复利，那么公式为：\n",
    "\n",
    "$$ 几何平均收益率 = \\sqrt[k]{R_t(k)+1}-1=\\sqrt[k]{\\prod_{j=0}^{k-1}(1+R_{t-j})}-1 $$\n",
    "\n",
    "* 七日年化\n",
    "\n",
    "七日年化收益率是货币基金最近7日的平均收益水平，进行年化以后得出的数据；7日年化收益率上显示的收益率是年化收益率，也就是说投资这款理财产品一年可以获得的收益。\n",
    "\n",
    "* 连续复利收益率\n",
    "\n",
    "单期与多期连续复利收益率的关系\n",
    "我们以两期连续复利收益率为例，两期连续复利收益率等于前一天和当天的单期复利收益\n",
    "\n",
    "率之和。进而推知，k期连续复利收益率为k天的单期连续复利收益率之和。这体现了连续\n",
    "\n",
    "复利收益率的优良性质：单期加总得到多期。\n",
    "<img src=https://pic4.zhimg.com/80/v2-da9072b4cb2dc03a8a8985cf50167e37_720w.webp width=30% />"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "(r2+1)**(1/n)-1=r"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## classwork1（收益率的计算）\n",
    "\n",
    "1, 导入中国平安\"000001\" 从日期\"20200301\"到'20230207'的收盘价\n",
    "\n",
    "2，以1天为一期，分别计算第一第二天的单期收益率，及其二期收益率，比较二期收益率与第一第二的单期收益率的关系\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import akshare as ak\n",
    "import pandas as pd\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "stock_pinan = ak.stock_zh_a_hist(symbol=\"000001\", period=\"daily\", start_date=\"20200301\", end_date='20230207', adjust=\"\")[\"收盘\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## classwork2（多期收益率连续复利计算）\n",
    "\n",
    "1，计算最开始的七日收益率，并基于此计算七日年化收益率\n",
    "\n",
    "2，计算第一第二天的单期连续复利，计算二期连续复利，比较两者之间的关系\n",
    "\n",
    "3, 1天为期，计算所有期的单期收益率和所有期的连续复利,并可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:>"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "(stock_pinan/stock_pinan.shift(1)-1).plot()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:>"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "np.log(stock_pinan/stock_pinan.shift(1)).plot()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "#(stock_pinan[7]/stock_pinan[0]-1)**(1/7)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 资产风险的测度\n",
    "\n",
    "\n",
    "## 风险与方差\n",
    "\n",
    "Markowitz首先提出来用方差来度量风险。单个资产的风险具体可以表达为：\n",
    "\n",
    "$$ \\sigma^2(R)=E\\{[R-E(R)]^2\\} $$\n",
    "\n",
    "其中，R是所有可能发生的（或者已经实现的）收益率（随机变量），E（R）表示预期收益率。若收益率R是离散分布，则：\n",
    "\n",
    "$$ \\sigma^2(R)=\\sum_{K}{p_k[R_k-E(R)]} $$\n",
    "\n",
    "方差风险度量法观念简单，容易理解，但是也有一些弊端。比如这一定义偏离了风险的本意，风险往往认为是潜在的损失，而方差是一个中性的概念，只有向下的波动才和风险本义相契合，向上的波动反而会让投资者获益，无法反应风险的经济性质。并且Markowitz在构建均值-方差投资组合时，将收益率看成服从正态分布，这是一个重要假设，这样才能忽略收益率的偏度和峰度等统计特性，只需考虑均值、方差即可，但实际上很多产品的收益率是不满足正态分布的，具有明显的偏度和峰度，继续使用方差度量风险可能会带来较大的误差。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "r=stock_pinan.shift(1)/stock_pinan-1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<AxesSubplot:>"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "r.plot()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.022092094022788313"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "((r-r.mean())**2).mean()**0.5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.0004880606183117191"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "((r-r.mean())**2).mean()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.0004887470608128608"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "r.var()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.022107624495021187"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "r.std()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 下行风险\n",
    "\n",
    "在Markowitz之后，Roy于1952年提出了用下行偏差（Downside Deviation）来度量风险的办法。下行偏差法和方差法类似，不过更贴近现实中投资者对风险的理解（只考虑低于目标收益率的变动）。计算下行偏差时，一个最重要的变量就是目标收益率，通常用可接受的最低收益率（Minimum Acceptable Rate of Return，MARR）来表示，MARR可以是无风险利率或者0，或者资产收益率的平均值。下行偏差描述的是低于MARR的收益率的发散程度，总体的下行偏差公式如下：\n",
    "\n",
    "$$ \\delta（R, MARR）=\\sqrt{E\\{[min(R-MARR,0)]^2\\}} $$\n",
    "若我们有R1，R2，...，RT作为R的随即样本，则样本额下行偏差为：\n",
    "\n",
    "$$ \\delta（R, MARR）=\\sqrt{\\frac{1}{T}\\sum_{t=1}^{T}\\{[min(R-MARR,0)]^2\\}} $$\n",
    "\n",
    "用下行偏差描述的风险称为下行风险（Downside Risk）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.00026052540201265304"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(r[r<r.mean()]**2).sum()/len(r)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 最大回撤\n",
    "\n",
    "实务上经常会用最大回撤（Maximum Drawdown，MDD）来衡量投资（特别是基金，股票投资组合）的表现，在介绍最大回撤前，我们先来了解下什么是回撤。某资产（或投资组合）在时刻T的回撤是指资产在（0，T）的最高峰值与现在价格 \n",
    " 之间的回落值，用数学公式表达为：\n",
    " \n",
    "$$ D(T)=max\\{0,max_{t\\in(0,T)}\\{P_t-P_T\\}\\} $$\n",
    " \n",
    " 对应的回撤率为：\n",
    " \n",
    "$$ d(T)=\\frac{D(T)}{max_{t\\in(0,T)}P_t} $$\n",
    " \n",
    "知晓回撤的含义，最大回撤就比较好理解了，资产在T时刻的最大回撤就是资产在（0，T）时段内回撤的最大值。直观地说就是这一时段内，资产价值从最高峰回落到最低谷的幅度。最大回撤通常用来描述投资者在持有资产时可能面临的最大亏损。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## classwork3(风险的计算)\n",
    "\n",
    "* 求中国平安从日期\"20200301\"到'20230207'的风险，下行风险，回测，回测率，最大回测\n",
    "\n",
    "* 在页面上实现选择不同的股票的不同时间段，自动计算以上量"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 组合投资的收益与风险\n",
    "\n",
    "\n",
    "https://zhuanlan.zhihu.com/p/361234664\n",
    "\n",
    "* 收益是有不确定性的\n",
    "\n",
    "* 收益越高不确定性越大"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 投资组合的收益率\n",
    "\n",
    "在拓展到N中风险资产之前，先来看两种资产的情况。假设现在市场有资产A和资产B，其随机收益率分别为 \n",
    "$R_A$和$R_B$,若投资人将其财富的一部分投入资产A，剩下的全部投入资产B，投资比例分别为$\\omega_A$和$\\omega_B$\n",
    "我们就可以求得投资组合的收益率  ，就是总收益除以初始资本\n",
    "\n",
    "$$ R_p = {\\omega_AR_A+\\omega_BR_B} $$\n",
    "$$\\omega_A+\\omega_B=1$$\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.18000000000000005"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "0.1*0.2+0.2*0.8"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### akshare中多个股票数据的组合"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "stock_set = ['000413','000063','002007',\"000001\",\"000002\"]\n",
    "\n",
    "#000413 东旭光电，000063 中兴通讯，002007 华兰生物，000001 平安银行，000002 万科A\n",
    "#https://zhuanlan.zhihu.com/p/20604930?refer=quantstory"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "p0=ak.stock_zh_a_hist(symbol=\"000413\", period=\"daily\", start_date=\"20210201\", end_date='20230201', \n",
    "                     adjust=\"hfq\")[[\"日期\",\"收盘\"]]\n",
    "p0.set_index(\"日期\",inplace=True)\n",
    "\n",
    "for i in stock_set[1:]:\n",
    "    p1=ak.stock_zh_a_hist(symbol=i, period=\"daily\", start_date=\"20210201\", end_date='20230201', \n",
    "                     adjust=\"hfq\")[[\"日期\",\"收盘\"]]\n",
    "    p1.set_index(\"日期\",inplace=True)\n",
    "    p0=pd.concat([p0,p1],axis=1)\n",
    "\n",
    "p0.columns=stock_set\n",
    "p0=p0.fillna(method=\"ffill\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>000413</th>\n",
       "      <th>000063</th>\n",
       "      <th>002007</th>\n",
       "      <th>000001</th>\n",
       "      <th>000002</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>日期</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2021-02-01</th>\n",
       "      <td>7.09</td>\n",
       "      <td>437.28</td>\n",
       "      <td>1251.42</td>\n",
       "      <td>4129.64</td>\n",
       "      <td>4464.71</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-02</th>\n",
       "      <td>7.12</td>\n",
       "      <td>429.46</td>\n",
       "      <td>1276.79</td>\n",
       "      <td>3923.23</td>\n",
       "      <td>4500.06</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-03</th>\n",
       "      <td>7.00</td>\n",
       "      <td>432.33</td>\n",
       "      <td>1252.20</td>\n",
       "      <td>4194.65</td>\n",
       "      <td>4445.07</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-04</th>\n",
       "      <td>6.55</td>\n",
       "      <td>426.46</td>\n",
       "      <td>1234.60</td>\n",
       "      <td>4137.77</td>\n",
       "      <td>4441.15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-05</th>\n",
       "      <td>6.61</td>\n",
       "      <td>418.63</td>\n",
       "      <td>1336.31</td>\n",
       "      <td>4191.40</td>\n",
       "      <td>4570.75</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-01-19</th>\n",
       "      <td>6.73</td>\n",
       "      <td>371.94</td>\n",
       "      <td>663.21</td>\n",
       "      <td>2658.44</td>\n",
       "      <td>3509.87</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-01-20</th>\n",
       "      <td>6.79</td>\n",
       "      <td>379.11</td>\n",
       "      <td>655.70</td>\n",
       "      <td>2664.95</td>\n",
       "      <td>3513.80</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-01-30</th>\n",
       "      <td>6.85</td>\n",
       "      <td>374.55</td>\n",
       "      <td>642.76</td>\n",
       "      <td>2668.20</td>\n",
       "      <td>3449.65</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-01-31</th>\n",
       "      <td>6.85</td>\n",
       "      <td>369.72</td>\n",
       "      <td>632.41</td>\n",
       "      <td>2642.19</td>\n",
       "      <td>3475.83</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-02-01</th>\n",
       "      <td>6.91</td>\n",
       "      <td>374.16</td>\n",
       "      <td>635.77</td>\n",
       "      <td>2595.06</td>\n",
       "      <td>3462.74</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>482 rows × 5 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "            000413  000063   002007   000001   000002\n",
       "日期                                                   \n",
       "2021-02-01    7.09  437.28  1251.42  4129.64  4464.71\n",
       "2021-02-02    7.12  429.46  1276.79  3923.23  4500.06\n",
       "2021-02-03    7.00  432.33  1252.20  4194.65  4445.07\n",
       "2021-02-04    6.55  426.46  1234.60  4137.77  4441.15\n",
       "2021-02-05    6.61  418.63  1336.31  4191.40  4570.75\n",
       "...            ...     ...      ...      ...      ...\n",
       "2023-01-19    6.73  371.94   663.21  2658.44  3509.87\n",
       "2023-01-20    6.79  379.11   655.70  2664.95  3513.80\n",
       "2023-01-30    6.85  374.55   642.76  2668.20  3449.65\n",
       "2023-01-31    6.85  369.72   632.41  2642.19  3475.83\n",
       "2023-02-01    6.91  374.16   635.77  2595.06  3462.74\n",
       "\n",
       "[482 rows x 5 columns]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "p0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [],
   "source": [
    "#help(p0.fillna)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>000413</th>\n",
       "      <th>000063</th>\n",
       "      <th>002007</th>\n",
       "      <th>000001</th>\n",
       "      <th>000002</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>日期</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2021-02-01</th>\n",
       "      <td>7.09</td>\n",
       "      <td>437.28</td>\n",
       "      <td>1251.42</td>\n",
       "      <td>4129.64</td>\n",
       "      <td>4464.71</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-02</th>\n",
       "      <td>7.12</td>\n",
       "      <td>429.46</td>\n",
       "      <td>1276.79</td>\n",
       "      <td>3923.23</td>\n",
       "      <td>4500.06</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-03</th>\n",
       "      <td>7.00</td>\n",
       "      <td>432.33</td>\n",
       "      <td>1252.20</td>\n",
       "      <td>4194.65</td>\n",
       "      <td>4445.07</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-04</th>\n",
       "      <td>6.55</td>\n",
       "      <td>426.46</td>\n",
       "      <td>1234.60</td>\n",
       "      <td>4137.77</td>\n",
       "      <td>4441.15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-05</th>\n",
       "      <td>6.61</td>\n",
       "      <td>418.63</td>\n",
       "      <td>1336.31</td>\n",
       "      <td>4191.40</td>\n",
       "      <td>4570.75</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-01-19</th>\n",
       "      <td>6.73</td>\n",
       "      <td>371.94</td>\n",
       "      <td>663.21</td>\n",
       "      <td>2658.44</td>\n",
       "      <td>3509.87</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-01-20</th>\n",
       "      <td>6.79</td>\n",
       "      <td>379.11</td>\n",
       "      <td>655.70</td>\n",
       "      <td>2664.95</td>\n",
       "      <td>3513.80</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-01-30</th>\n",
       "      <td>6.85</td>\n",
       "      <td>374.55</td>\n",
       "      <td>642.76</td>\n",
       "      <td>2668.20</td>\n",
       "      <td>3449.65</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-01-31</th>\n",
       "      <td>6.85</td>\n",
       "      <td>369.72</td>\n",
       "      <td>632.41</td>\n",
       "      <td>2642.19</td>\n",
       "      <td>3475.83</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-02-01</th>\n",
       "      <td>6.91</td>\n",
       "      <td>374.16</td>\n",
       "      <td>635.77</td>\n",
       "      <td>2595.06</td>\n",
       "      <td>3462.74</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>482 rows × 5 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "            000413  000063   002007   000001   000002\n",
       "日期                                                   \n",
       "2021-02-01    7.09  437.28  1251.42  4129.64  4464.71\n",
       "2021-02-02    7.12  429.46  1276.79  3923.23  4500.06\n",
       "2021-02-03    7.00  432.33  1252.20  4194.65  4445.07\n",
       "2021-02-04    6.55  426.46  1234.60  4137.77  4441.15\n",
       "2021-02-05    6.61  418.63  1336.31  4191.40  4570.75\n",
       "...            ...     ...      ...      ...      ...\n",
       "2023-01-19    6.73  371.94   663.21  2658.44  3509.87\n",
       "2023-01-20    6.79  379.11   655.70  2664.95  3513.80\n",
       "2023-01-30    6.85  374.55   642.76  2668.20  3449.65\n",
       "2023-01-31    6.85  369.72   632.41  2642.19  3475.83\n",
       "2023-02-01    6.91  374.16   635.77  2595.06  3462.74\n",
       "\n",
       "[482 rows x 5 columns]"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "p0"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### classwork4（编程计算组合收益）\n",
    "\n",
    "1， 求这些股票每天的单期收益率与单期连续收益率\n",
    "\n",
    "2， 已知投资权重为[0.2,0.3,0.2,0.2,0.1], 求此权重下每天的组合收益率(np.dot，点乘的机制)\n",
    "\n",
    "3， 此投资组合下最终的收益率和连续收益率是多少？"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "w1=np.array([0.2,0.3,0.2,0.2,0.1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-0.0096689"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "0.2*0.004231+0.3*(-0.017883)+0.2*0.020273+0.2*(-0.049983)+0.1*0.007918"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "r_n=np.dot(r,w1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>000413</th>\n",
       "      <th>000063</th>\n",
       "      <th>002007</th>\n",
       "      <th>000001</th>\n",
       "      <th>000002</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>日期</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2021-02-02</th>\n",
       "      <td>0.004231</td>\n",
       "      <td>-0.017883</td>\n",
       "      <td>0.020273</td>\n",
       "      <td>-0.049983</td>\n",
       "      <td>0.007918</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-03</th>\n",
       "      <td>-0.016854</td>\n",
       "      <td>0.006683</td>\n",
       "      <td>-0.019259</td>\n",
       "      <td>0.069183</td>\n",
       "      <td>-0.012220</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-04</th>\n",
       "      <td>-0.064286</td>\n",
       "      <td>-0.013578</td>\n",
       "      <td>-0.014055</td>\n",
       "      <td>-0.013560</td>\n",
       "      <td>-0.000882</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-05</th>\n",
       "      <td>0.009160</td>\n",
       "      <td>-0.018360</td>\n",
       "      <td>0.082383</td>\n",
       "      <td>0.012961</td>\n",
       "      <td>0.029182</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-08</th>\n",
       "      <td>-0.018154</td>\n",
       "      <td>0.000932</td>\n",
       "      <td>0.010065</td>\n",
       "      <td>-0.005039</td>\n",
       "      <td>0.007159</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-01-19</th>\n",
       "      <td>0.004478</td>\n",
       "      <td>0.000350</td>\n",
       "      <td>0.006297</td>\n",
       "      <td>-0.001221</td>\n",
       "      <td>0.002617</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-01-20</th>\n",
       "      <td>0.008915</td>\n",
       "      <td>0.019277</td>\n",
       "      <td>-0.011324</td>\n",
       "      <td>0.002449</td>\n",
       "      <td>0.001120</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-01-30</th>\n",
       "      <td>0.008837</td>\n",
       "      <td>-0.012028</td>\n",
       "      <td>-0.019735</td>\n",
       "      <td>0.001220</td>\n",
       "      <td>-0.018257</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-01-31</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>-0.012895</td>\n",
       "      <td>-0.016102</td>\n",
       "      <td>-0.009748</td>\n",
       "      <td>0.007589</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-02-01</th>\n",
       "      <td>0.008759</td>\n",
       "      <td>0.012009</td>\n",
       "      <td>0.005313</td>\n",
       "      <td>-0.017837</td>\n",
       "      <td>-0.003766</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>481 rows × 5 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "              000413    000063    002007    000001    000002\n",
       "日期                                                          \n",
       "2021-02-02  0.004231 -0.017883  0.020273 -0.049983  0.007918\n",
       "2021-02-03 -0.016854  0.006683 -0.019259  0.069183 -0.012220\n",
       "2021-02-04 -0.064286 -0.013578 -0.014055 -0.013560 -0.000882\n",
       "2021-02-05  0.009160 -0.018360  0.082383  0.012961  0.029182\n",
       "2021-02-08 -0.018154  0.000932  0.010065 -0.005039  0.007159\n",
       "...              ...       ...       ...       ...       ...\n",
       "2023-01-19  0.004478  0.000350  0.006297 -0.001221  0.002617\n",
       "2023-01-20  0.008915  0.019277 -0.011324  0.002449  0.001120\n",
       "2023-01-30  0.008837 -0.012028 -0.019735  0.001220 -0.018257\n",
       "2023-01-31  0.000000 -0.012895 -0.016102 -0.009748  0.007589\n",
       "2023-02-01  0.008759  0.012009  0.005313 -0.017837 -0.003766\n",
       "\n",
       "[481 rows x 5 columns]"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "r"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "r_log=np.log(p0/p0.shift(1)).dropna()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>000413</th>\n",
       "      <th>000063</th>\n",
       "      <th>002007</th>\n",
       "      <th>000001</th>\n",
       "      <th>000002</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>日期</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2021-02-02</th>\n",
       "      <td>0.004222</td>\n",
       "      <td>-0.018045</td>\n",
       "      <td>0.020070</td>\n",
       "      <td>-0.051275</td>\n",
       "      <td>0.007886</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-03</th>\n",
       "      <td>-0.016998</td>\n",
       "      <td>0.006661</td>\n",
       "      <td>-0.019447</td>\n",
       "      <td>0.066895</td>\n",
       "      <td>-0.012295</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-04</th>\n",
       "      <td>-0.066445</td>\n",
       "      <td>-0.013671</td>\n",
       "      <td>-0.014155</td>\n",
       "      <td>-0.013653</td>\n",
       "      <td>-0.000882</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-05</th>\n",
       "      <td>0.009119</td>\n",
       "      <td>-0.018531</td>\n",
       "      <td>0.079165</td>\n",
       "      <td>0.012878</td>\n",
       "      <td>0.028764</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-08</th>\n",
       "      <td>-0.018321</td>\n",
       "      <td>0.000931</td>\n",
       "      <td>0.010015</td>\n",
       "      <td>-0.005052</td>\n",
       "      <td>0.007133</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-01-19</th>\n",
       "      <td>0.004468</td>\n",
       "      <td>0.000350</td>\n",
       "      <td>0.006277</td>\n",
       "      <td>-0.001222</td>\n",
       "      <td>0.002613</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-01-20</th>\n",
       "      <td>0.008876</td>\n",
       "      <td>0.019094</td>\n",
       "      <td>-0.011388</td>\n",
       "      <td>0.002446</td>\n",
       "      <td>0.001119</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-01-30</th>\n",
       "      <td>0.008798</td>\n",
       "      <td>-0.012101</td>\n",
       "      <td>-0.019932</td>\n",
       "      <td>0.001219</td>\n",
       "      <td>-0.018425</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-01-31</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>-0.012979</td>\n",
       "      <td>-0.016233</td>\n",
       "      <td>-0.009796</td>\n",
       "      <td>0.007561</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-02-01</th>\n",
       "      <td>0.008721</td>\n",
       "      <td>0.011938</td>\n",
       "      <td>0.005299</td>\n",
       "      <td>-0.017998</td>\n",
       "      <td>-0.003773</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>481 rows × 5 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "              000413    000063    002007    000001    000002\n",
       "日期                                                          \n",
       "2021-02-02  0.004222 -0.018045  0.020070 -0.051275  0.007886\n",
       "2021-02-03 -0.016998  0.006661 -0.019447  0.066895 -0.012295\n",
       "2021-02-04 -0.066445 -0.013671 -0.014155 -0.013653 -0.000882\n",
       "2021-02-05  0.009119 -0.018531  0.079165  0.012878  0.028764\n",
       "2021-02-08 -0.018321  0.000931  0.010015 -0.005052  0.007133\n",
       "...              ...       ...       ...       ...       ...\n",
       "2023-01-19  0.004468  0.000350  0.006277 -0.001222  0.002613\n",
       "2023-01-20  0.008876  0.019094 -0.011388  0.002446  0.001119\n",
       "2023-01-30  0.008798 -0.012101 -0.019932  0.001219 -0.018425\n",
       "2023-01-31  0.000000 -0.012979 -0.016233 -0.009796  0.007561\n",
       "2023-02-01  0.008721  0.011938  0.005299 -0.017998 -0.003773\n",
       "\n",
       "[481 rows x 5 columns]"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "r_log"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [],
   "source": [
    "r=(p0/p0.shift(1)-1).dropna()\n",
    "r_log=np.log(p0/p0.shift(1)).dropna()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [],
   "source": [
    "r_n=np.dot(r,np.array([0.2,0.3,0.2,0.2,0.1]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "weight=np.array([0.2,0.3,0.2,0.2,0.1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.012715105464818532"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "r_n.std()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "#np.dot((p/p.shift(1)-1),np.array([0.2,0.3,0.2,0.2,0.1]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "#np.dot(weight.T,(p/p.shift(1)-1).values)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "000413   -0.025716\n",
       "000063   -0.158173\n",
       "002007   -0.677197\n",
       "000001   -0.464581\n",
       "000002   -0.254144\n",
       "dtype: float64"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(np.log(p)-np.log(p.shift(1))).sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>000413</th>\n",
       "      <th>000063</th>\n",
       "      <th>002007</th>\n",
       "      <th>000001</th>\n",
       "      <th>000002</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>日期</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2021-02-01</th>\n",
       "      <td>7.09</td>\n",
       "      <td>437.28</td>\n",
       "      <td>1251.42</td>\n",
       "      <td>4129.64</td>\n",
       "      <td>4464.71</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-02</th>\n",
       "      <td>7.12</td>\n",
       "      <td>429.46</td>\n",
       "      <td>1276.79</td>\n",
       "      <td>3923.23</td>\n",
       "      <td>4500.06</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-03</th>\n",
       "      <td>7.00</td>\n",
       "      <td>432.33</td>\n",
       "      <td>1252.20</td>\n",
       "      <td>4194.65</td>\n",
       "      <td>4445.07</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-04</th>\n",
       "      <td>6.55</td>\n",
       "      <td>426.46</td>\n",
       "      <td>1234.60</td>\n",
       "      <td>4137.77</td>\n",
       "      <td>4441.15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-05</th>\n",
       "      <td>6.61</td>\n",
       "      <td>418.63</td>\n",
       "      <td>1336.31</td>\n",
       "      <td>4191.40</td>\n",
       "      <td>4570.75</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-01-19</th>\n",
       "      <td>6.73</td>\n",
       "      <td>371.94</td>\n",
       "      <td>663.21</td>\n",
       "      <td>2658.44</td>\n",
       "      <td>3509.87</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-01-20</th>\n",
       "      <td>6.79</td>\n",
       "      <td>379.11</td>\n",
       "      <td>655.70</td>\n",
       "      <td>2664.95</td>\n",
       "      <td>3513.80</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-01-30</th>\n",
       "      <td>6.85</td>\n",
       "      <td>374.55</td>\n",
       "      <td>642.76</td>\n",
       "      <td>2668.20</td>\n",
       "      <td>3449.65</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-01-31</th>\n",
       "      <td>6.85</td>\n",
       "      <td>369.72</td>\n",
       "      <td>632.41</td>\n",
       "      <td>2642.19</td>\n",
       "      <td>3475.83</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-02-01</th>\n",
       "      <td>6.91</td>\n",
       "      <td>374.16</td>\n",
       "      <td>635.77</td>\n",
       "      <td>2595.06</td>\n",
       "      <td>3462.74</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>482 rows × 5 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "            000413  000063   002007   000001   000002\n",
       "日期                                                   \n",
       "2021-02-01    7.09  437.28  1251.42  4129.64  4464.71\n",
       "2021-02-02    7.12  429.46  1276.79  3923.23  4500.06\n",
       "2021-02-03    7.00  432.33  1252.20  4194.65  4445.07\n",
       "2021-02-04    6.55  426.46  1234.60  4137.77  4441.15\n",
       "2021-02-05    6.61  418.63  1336.31  4191.40  4570.75\n",
       "...            ...     ...      ...      ...      ...\n",
       "2023-01-19    6.73  371.94   663.21  2658.44  3509.87\n",
       "2023-01-20    6.79  379.11   655.70  2664.95  3513.80\n",
       "2023-01-30    6.85  374.55   642.76  2668.20  3449.65\n",
       "2023-01-31    6.85  369.72   632.41  2642.19  3475.83\n",
       "2023-02-01    6.91  374.16   635.77  2595.06  3462.74\n",
       "\n",
       "[482 rows x 5 columns]"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "p"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[-0.0257157 , -0.15589021, -0.67719732, -0.4645806 , -0.25414408]])"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.log(p.tail(1).values)-np.log(p.head(1).values)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 投资组合的风险\n",
    "\n",
    "资产风险的衡量我们上一节讲过了，这里我们还沿用收益率的方差来指代风险。单个资产收益率的方差为：\n",
    "\n",
    "$$ \\sigma^2(R_i)=E\\{[R_i-E(R_i)]^2\\ $$\n",
    "\n",
    "两个资产组成的投资组合的方差为：\n",
    "\n",
    "$$ \\sigma^2(R_p)=E\\{[R_p-E(R_p)]^2\\} $$\n",
    "\n",
    "$$ =E\\{[\\omega_AR_A+\\omega_BR_B-E(\\omega_AR_A+\\omega_BR_B)]^2\\} $$\n",
    "\n",
    "$$ =E\\{\\{\\omega_A[R_A-E(R_A)])+\\omega_B[R_B-E(R_B)]\\}^2\\} $$\n",
    "\n",
    "$$ =E\\{\\omega^2_A[R_A-E(R_A)]^2)+\\omega^2_B[R_B-E(R_B)]^2+2\\omega_A\\omega_B[R_A-E(R_A)][R_B-E(R_B)]\\} $$\n",
    "\n",
    "$$ =\\omega^2_A\\sigma^2(R_A)+\\omega^2_B\\sigma^2(R_B)+2\\omega_A\\omega_B\\sigma(R_A,R_B) $$\n",
    "\n",
    "其中 $ \\sigma(R_A,R_B) $为资产A与资产B的协方差，也可以写作 $ Cov（R_A,R_B）$ \n",
    "$$ Cov(R_A,R_B)=E\\{[R_A-E(R_A)][R_B-E(R_B)]\\} $$\n",
    "\n",
    "从上式可以看出，如果资产A与资产B收益率变化趋势一致（你为正，我也为正），那么协方差为正；反之（我赚了，你赔了）则为负。所以协方差也就是描述两个变量有多大的“可能”朝一个方向改变，但是协方差会受比例影响，比如A扩大十倍收益率，B扩大十倍收益率，那么协方差会扩大100倍。还有就是相关系数，更能刻画两者的相关度。相关系数和协方差的关系如下关系式：\n",
    "\n",
    "$$ \\rho(A,B)=\\frac{\\sigma(R_A,R_B)}{\\sigma(R_A)\\sigma(R_B)} $$\n",
    "\n",
    "当把两个投资组合推广到n个投资组合的时候，我们就得到了如下公式：\n",
    "\n",
    "$$ \\sigma^2(R_p)=\\sigma^2(\\sum_{i=1}^{N}{\\omega_iR_i})=\\sum_{i=1}^{N}{\\omega_i^2\\sigma^2(R_i)}+\\sum_{i\\ne j}{\\omega_i\\omega_j\\sigma(R_i,R_j)} $$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>000413</th>\n",
       "      <th>000063</th>\n",
       "      <th>002007</th>\n",
       "      <th>000001</th>\n",
       "      <th>000002</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>日期</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2021-02-02</th>\n",
       "      <td>0.004231</td>\n",
       "      <td>-0.017883</td>\n",
       "      <td>0.020273</td>\n",
       "      <td>-0.049983</td>\n",
       "      <td>0.007918</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-03</th>\n",
       "      <td>-0.016854</td>\n",
       "      <td>0.006683</td>\n",
       "      <td>-0.019259</td>\n",
       "      <td>0.069183</td>\n",
       "      <td>-0.012220</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-04</th>\n",
       "      <td>-0.064286</td>\n",
       "      <td>-0.013578</td>\n",
       "      <td>-0.014055</td>\n",
       "      <td>-0.013560</td>\n",
       "      <td>-0.000882</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-05</th>\n",
       "      <td>0.009160</td>\n",
       "      <td>-0.018360</td>\n",
       "      <td>0.082383</td>\n",
       "      <td>0.012961</td>\n",
       "      <td>0.029182</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-08</th>\n",
       "      <td>-0.018154</td>\n",
       "      <td>0.000932</td>\n",
       "      <td>0.010065</td>\n",
       "      <td>-0.005039</td>\n",
       "      <td>0.007159</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-01-19</th>\n",
       "      <td>0.004478</td>\n",
       "      <td>0.000350</td>\n",
       "      <td>0.006297</td>\n",
       "      <td>-0.001221</td>\n",
       "      <td>0.002617</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-01-20</th>\n",
       "      <td>0.008915</td>\n",
       "      <td>0.019277</td>\n",
       "      <td>-0.011324</td>\n",
       "      <td>0.002449</td>\n",
       "      <td>0.001120</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-01-30</th>\n",
       "      <td>0.008837</td>\n",
       "      <td>-0.012028</td>\n",
       "      <td>-0.019735</td>\n",
       "      <td>0.001220</td>\n",
       "      <td>-0.018257</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-01-31</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>-0.012895</td>\n",
       "      <td>-0.016102</td>\n",
       "      <td>-0.009748</td>\n",
       "      <td>0.007589</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2023-02-01</th>\n",
       "      <td>0.008759</td>\n",
       "      <td>0.012009</td>\n",
       "      <td>0.005313</td>\n",
       "      <td>-0.017837</td>\n",
       "      <td>-0.003766</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>481 rows × 5 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "              000413    000063    002007    000001    000002\n",
       "日期                                                          \n",
       "2021-02-02  0.004231 -0.017883  0.020273 -0.049983  0.007918\n",
       "2021-02-03 -0.016854  0.006683 -0.019259  0.069183 -0.012220\n",
       "2021-02-04 -0.064286 -0.013578 -0.014055 -0.013560 -0.000882\n",
       "2021-02-05  0.009160 -0.018360  0.082383  0.012961  0.029182\n",
       "2021-02-08 -0.018154  0.000932  0.010065 -0.005039  0.007159\n",
       "...              ...       ...       ...       ...       ...\n",
       "2023-01-19  0.004478  0.000350  0.006297 -0.001221  0.002617\n",
       "2023-01-20  0.008915  0.019277 -0.011324  0.002449  0.001120\n",
       "2023-01-30  0.008837 -0.012028 -0.019735  0.001220 -0.018257\n",
       "2023-01-31  0.000000 -0.012895 -0.016102 -0.009748  0.007589\n",
       "2023-02-01  0.008759  0.012009  0.005313 -0.017837 -0.003766\n",
       "\n",
       "[481 rows x 5 columns]"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "r"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.012715105464818532"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.dot(r,w1).std()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.017650297354124954\n",
      "0.02023571339872403\n",
      "0.023556216229635107\n",
      "0.02082897428703604\n",
      "0.01832756921980858\n"
     ]
    }
   ],
   "source": [
    "for i in range(0,5):\n",
    "    print(r.iloc[:,i].std())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.01832756921980858"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "r.iloc[:,4].std()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>000413</th>\n",
       "      <th>000063</th>\n",
       "      <th>002007</th>\n",
       "      <th>000001</th>\n",
       "      <th>000002</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>000413</th>\n",
       "      <td>0.000312</td>\n",
       "      <td>0.000079</td>\n",
       "      <td>0.000044</td>\n",
       "      <td>0.000037</td>\n",
       "      <td>0.000027</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>000063</th>\n",
       "      <td>0.000079</td>\n",
       "      <td>0.000409</td>\n",
       "      <td>0.000132</td>\n",
       "      <td>0.000122</td>\n",
       "      <td>0.000071</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>002007</th>\n",
       "      <td>0.000044</td>\n",
       "      <td>0.000132</td>\n",
       "      <td>0.000555</td>\n",
       "      <td>0.000094</td>\n",
       "      <td>0.000057</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>000001</th>\n",
       "      <td>0.000037</td>\n",
       "      <td>0.000122</td>\n",
       "      <td>0.000094</td>\n",
       "      <td>0.000434</td>\n",
       "      <td>0.000202</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>000002</th>\n",
       "      <td>0.000027</td>\n",
       "      <td>0.000071</td>\n",
       "      <td>0.000057</td>\n",
       "      <td>0.000202</td>\n",
       "      <td>0.000336</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          000413    000063    002007    000001    000002\n",
       "000413  0.000312  0.000079  0.000044  0.000037  0.000027\n",
       "000063  0.000079  0.000409  0.000132  0.000122  0.000071\n",
       "002007  0.000044  0.000132  0.000555  0.000094  0.000057\n",
       "000001  0.000037  0.000122  0.000094  0.000434  0.000202\n",
       "000002  0.000027  0.000071  0.000057  0.000202  0.000336"
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "r.cov()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.012728343475134648"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.sqrt(np.dot(w1, np.dot(r.cov(), w1)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "#r_n=np.dot((p/p.shift(1)-1),np.array([0.2,0.3,0.2,0.2,0.1]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 107,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.012715105464818532"
      ]
     },
     "execution_count": 107,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "r_n[1:].std()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 110,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "000413    0.017650\n",
       "000063    0.020236\n",
       "002007    0.023556\n",
       "000001    0.020829\n",
       "000002    0.018328\n",
       "dtype: float64"
      ]
     },
     "execution_count": 110,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "(p/p.shift(1)-1).dropna().std()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [],
   "source": [
    "weight=np.array([0.2,0.3,0.2,0.2,0.1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.012728343475134648"
      ]
     },
     "execution_count": 67,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.sqrt(np.dot(weight, np.dot(r.cov(), weight)))#协方差计算"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### classwork5（编程计算组合风险）\n",
    "\n",
    "1， 求这些股票的组合风险（两种方法1，先求组合收益再求风险，2 直接通过协方差求）\n",
    "\n",
    "2， 求这些股票单个风险，并与上题比较\n",
    "\n",
    "3， 蒙特卡洛模拟，随机生成weight数据，并基于此计算此投资组合的此时间段的收益与风险\n",
    "\n",
    "4,  在页面上实现输入不同的股票组合，生成股票组合的收益风险散点图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.08332207, 0.04651511, 0.24801942, 0.44767755, 0.17446585])"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#随机生成投资组合的权重\n",
    "weight_ram = np.random.random(len(stock_set))\n",
    "weight_ram=weight_ram/np.sum(weight_ram)\n",
    "weight_ram"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.012404593007410245"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "r_n_0.std()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 63,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1e2faff4af0>]"
      ]
     },
     "execution_count": 63,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(x,y,\"o\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "002613,000063,002594,600519,600004"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 夏普比率与最佳投资组合\n",
    "\n",
    "夏普比率（ Sharpe ratio），是指投资组合）在对其调整风险后，相对于无风险资产的表现。\n",
    "\n",
    "它代表投资者额外承受的每一单位风险所获得的超额收益。对一个投资组合而言，夏普比率越高越好。\n",
    "夏普比率 = (回报率 – 无风险利率)/标准差\n",
    "\n",
    "\n",
    "假设目前投资一个预期回报率为12%，波动率（标准差）为10%的投资组合。无风险利率是5%。\n",
    "夏普比率就是：\n",
    "\n",
    "$$ (Ra−Rf)/ σa = (0.12−0.05) /0.1 = 0.7 $$\n",
    "\n",
    "一般来说单纯买入并持有指数，例如持有标普500指数，夏普率大约在0.5左右，而经过资产配置后的投资组合，夏普率通常可以得到提升，如果是接近1，就是不错的策略，如果是1.5以上那就非常优秀了。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [],
   "source": [
    "x=[]\n",
    "y=[]\n",
    "for i in range(1000):\n",
    "    w0=np.random.random(len(stock_set))\n",
    "    w0=w0/np.sum(w0)\n",
    "    r_n_0=np.dot(r,w0)\n",
    "    x.append(r_n_0.std())\n",
    "    y.append(r_n_0.sum())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "metadata": {},
   "outputs": [],
   "source": [
    "def xiapu(w0):\n",
    "    w0=w0/np.sum(w0)\n",
    "    r_n_0=np.dot(r_log,w0)\n",
    "    return r_n_0.std()/r_n_0.sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.0733588 , 0.17491114, 0.31811647, 0.04787831, 0.38573529])"
      ]
     },
     "execution_count": 82,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "w0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "np.sum(np.dot(r_log.dropna(),weights))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.0733588 , 0.17491114, 0.31811647, 0.04787831, 0.38573529])"
      ]
     },
     "execution_count": 80,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "w0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-0.03656299030214233"
      ]
     },
     "execution_count": 90,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xiapu(w0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "     fun: -0.6826820984438616\n",
       "     jac: array([-0.        ,  3.96290436, 17.87991556, 12.2497878 ,  6.68603487])\n",
       " message: 'Optimization terminated successfully'\n",
       "    nfev: 42\n",
       "     nit: 8\n",
       "    njev: 7\n",
       "  status: 0\n",
       " success: True\n",
       "       x: array([1., 0., 0., 0., 0.])"
      ]
     },
     "execution_count": 96,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import scipy.optimize as sco\n",
    "\n",
    "noa=len(stock_set)\n",
    "#约束是所有参数(权重)的总和为1。这可以用minimize函数的约定表达如下\n",
    "cons = ({'type':'eq', 'fun':lambda x: np.sum(x)-1})\n",
    "\n",
    "#我们还将参数值(权重)限制在0和1之间。这些值以多个元组组成的一个元组形式提供给最小化函数\n",
    "bnds = tuple((0,1) for x in range(noa))\n",
    "\n",
    "#优化函数调用中忽略的唯一输入是起始参数列表(对权重的初始猜测)。我们简单的使用平均分布。\n",
    "opts = sco.minimize(xiapu, noa*[1./noa,], method = 'SLSQP', bounds = bnds, constraints = cons)\n",
    "\n",
    "opts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1., 0., 0., 0., 0.])"
      ]
     },
     "execution_count": 97,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "opts.x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "metadata": {},
   "outputs": [],
   "source": [
    "w0=opts.x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.01755564992619949 -0.02571570276445901\n"
     ]
    }
   ],
   "source": [
    "w0=w0/np.sum(w0)\n",
    "r_n_0=np.dot(r_log,w0)\n",
    "print(r_n_0.std(),r_n_0.sum())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 102,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1e2fca17130>]"
      ]
     },
     "execution_count": 102,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(x,y,\"o\")\n",
    "plt.plot([0.01755564992619949],[-0.02571570276445901],\"o\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [],
   "source": [
    "def min_sharpe(weights):\n",
    "    \n",
    "    weights = weights/np.sum(weights)\n",
    "    z_r=np.sum(np.dot(r_log.dropna(),weights))\n",
    "    z_f=np.sqrt(np.dot(weights, np.dot(r_log.dropna().cov(), weights)))\n",
    "\n",
    "    return z_f/z_r#optimize是去最小值，所以这里用夏普率的倒数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {},
   "outputs": [],
   "source": [
    "def min_sharpe(weights):\n",
    "    \n",
    "    weights = weights/np.sum(weights)\n",
    "    z_r=np.sum(np.dot(r_log,weights))\n",
    "    z_f=np.sqrt(np.dot(weights, np.dot(r_log.cov(), weights)))\n",
    "\n",
    "    return z_f/z_r#optimize是去最小值，所以这里用夏普率的倒数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-0.03660105693431829"
      ]
     },
     "execution_count": 87,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "min_sharpe(w0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 88,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "     fun: -0.6833928556353901\n",
       "     jac: array([-0.        ,  3.96703061, 17.89853101, 12.26254153,  6.69299625])\n",
       " message: 'Optimization terminated successfully'\n",
       "    nfev: 48\n",
       "     nit: 9\n",
       "    njev: 8\n",
       "  status: 0\n",
       " success: True\n",
       "       x: array([1.00000000e+00, 1.36657175e-13, 0.00000000e+00, 0.00000000e+00,\n",
       "       5.67766337e-14])"
      ]
     },
     "execution_count": 88,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import scipy.optimize as sco\n",
    "\n",
    "noa=len(stock_set)\n",
    "#约束是所有参数(权重)的总和为1。这可以用minimize函数的约定表达如下\n",
    "cons = ({'type':'eq', 'fun':lambda x: np.sum(x)-1})\n",
    "\n",
    "#我们还将参数值(权重)限制在0和1之间。这些值以多个元组组成的一个元组形式提供给最小化函数\n",
    "bnds = tuple((0,1) for x in range(noa))\n",
    "\n",
    "#优化函数调用中忽略的唯一输入是起始参数列表(对权重的初始猜测)。我们简单的使用平均分布。\n",
    "opts = sco.minimize(min_sharpe, noa*[1./noa,], method = 'SLSQP', bounds = bnds, constraints = cons)\n",
    "\n",
    "opts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [],
   "source": [
    "w=np.array([1.00000000e+00, 1.36657175e-13, 0.00000000e+00, 0.00000000e+00,5.67766337e-14])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-0.025715702764494558"
      ]
     },
     "execution_count": 50,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.sum(np.dot(r_log.dropna(),w))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.017573927546898845"
      ]
     },
     "execution_count": 51,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.sqrt(np.dot(w, np.dot(r_log.dropna().cov(), w)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-1.4632871733349349"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "-0.025715702764494558/0.017573927546898845"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-2.045160723932827"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "-0.025715702764494558/0.012573927546898845"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['2233', '9990']"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "\"2233,9990\".split(\",\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## classwork 6\n",
    "\n",
    "* 在页面上实现选择不同的股票组合，显示最优夏普率的选择"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### classwork 6\n",
    "\n",
    "* 找一个组合收益为正的股票组合，看此时的最佳组合位置\n",
    "\n",
    "* 如果使用下行风险代替风险，看看散点图有何变化\n",
    "\n",
    "* 下行风险下的最优组合怎样计算？"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## CAPM\n",
    "\n",
    "https://zhuanlan.zhihu.com/p/366322544\n",
    "\n",
    "在20世纪60年代，三位学者Sharpe（1964），Lintner（1965），Mossin（1966）在Markowitz模型框架下不约而同推导除了奠定现代投资学的经典模型：资本资产定价模型（Capital asset pricing model，CAPM）。三位学者经过严格的推导都得出以下结论：对于任意的资产组合，其收益率 满足以下关系式：\n",
    "\n",
    "$$ E(R_q)-R_f=\\beta_{qm}[E(R_m)-R_f] $$\n",
    "\n",
    "该公式被称为传统的CAPM应模型，其中：Rm是市场投资组合之收益率，该组合是市场上所有风险资产的组合，包括股票等金融资产，也包括黄金等实物资产，在现实中构建这样的投资组合时不大可能实现的，因此在实务中常常以大盘指数来替代市场投资组合，根据大盘指数计算出来的收益率被看做Rm\n",
    "\n",
    "$$ \\beta_{qm}=\\frac{\\sigma(R_q,R_m)}{\\sigma^2(R_m)} $$\n",
    "为投资组合q的beta值，其中分母为资产组合收益率与市场投资组合收益率的协方差， \n",
    "分子为市场投资组合的方差，beta贝塔值反映出资产组合q的系统性风险；如果拟采用大盘指数来计算Rm，那么系统性风险那就是大盘的涨跌。\n",
    "\n",
    "\n",
    "E(R_q)-R_f为风险投资组合q比无风险利率高出的期望收益率，高出来的部分是因为投资人在持有风险组合q时，承担了更多的风险，因此E(R_q)-R_f被称为风险溢价（Risk Premium）。\n",
    "\n",
    "CAPM中的投资组合q可以是任意投资组合，也可以是单只股票，单只股票我们用小写i表示，那么就可以得到单只股票的CAPM公式\n",
    "$$ E(R_q)=R_f+\\beta_{qm}[E(R_m)-R_f] $$\n",
    "\n",
    "\n",
    "其中的$\\beta_{qm}$可以反映出单个资产的系统风险水平，若等于1，则资产i的价格和市场投资组合的价格波动性是一样的。如果小于1，则资产i的价格波动程度小于市场投资组合的；若大于1，则资产i的波动性更大。值为正就说明资产i的价格和市场投资组合价格变动同方向，反之则相反变动。\n",
    "\n",
    "CAPM模型说明，单只股票的期望收益是无风险收益加上系统性风险溢价，非系统性风险可以通过分散化投资消除，所以没有对应的风险溢价。\n",
    "\n",
    "\n",
    "\n",
    "CAPM公式中个股和大盘的收益率都是期望值，Jenson（1968）在研究共同基金表现时将CAPM模型写成如下形式：\n",
    "\n",
    "$$ E(R_{it})-R_{ft}=\\alpha_i+\\beta_{i}[E(R_{mt})-R_{ft}]+\\varepsilon_{it} $$\n",
    "\n",
    "进行实证分析，$ R_{it},R_{ft},R_{mt}$\n",
    " 对应的是个股i、无风险资产（通常是银行存款、国债）、市场指数（大盘指数）的收益率之时间序列资料，对这些资料进行线性回归分析，得到未知参数alpha和beta的估计值 \n",
    " 。式子中的alpha是由Jenson引入的，所以又被称为Jenson's Alpha。根据CAPM模型之假设， \n",
    " $ R_{it}$是服从正态分布的随机数，这样就可以判断 alpha和beta\n",
    " 之统计显著性。 \n",
    " 可以解释个股过去的收益率与风险之间的关系， \n",
    " 表示收益率胜过大盘的部分，通常也用来衡量基金经理的绩效。现在所有的投资者在做的事情都可以用一句话来概括，就是试图运用各种方法创造显著的正阿尔法。这些方法包括：基本面分析，消息面分析，技术面分析和阿尔法策略。\n",
    "\n",
    "阿尔法策略的重点在于通过构建投资组合对冲掉系统风险，锁定alpha超额收益。若在有卖空机制的市场，对冲投资组合比较好构建。首先明确整个投资组合的资金，然后确定出具有较高alpha收益的、需要最多的证券组合和具有市场指数特征、用来对冲掉系统风险的、需要做空的证券组合，其次分配好资金的比重，最终获得稳定的Alpha收益率。另外也可以用证券和股指期货结合进行操作，比如投资者预测出未来会跑赢大盘的证券，则可以在证券市场将其买入，同时在期货市场卖空股指期货合约，以对冲系统性风险，这样市场的涨跌不会影响到投资组合的收益率。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### classwork6 \n",
    "\n",
    "* 获取数据SHSE.000902（中证流通指数）与SHSE.600596（新安股份）的数据在2014-01-01到2014-12-31之间的数据\n",
    "\n",
    "* 由于数据缺失，通过pd.merge基于时间连接数据，并计算对应的Rq Rm Rf，然后做出Rm-Rf 与Rq-Rf的散点图，另外无风险利率为一年期的国债利率，其年化为3.6%\n",
    "\n",
    "* 通过sm.OLS函数进行线性拟合，并画出拟合结果"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### akshare 指数历史行情数据\n",
    "https://zhuanlan.zhihu.com/p/609079456\n",
    "\n",
    "接口: index_zh_a_hist\n",
    "\n",
    "目标地址: http://quote.eastmoney.com/center/hszs.html\n",
    "\n",
    "描述: 东方财富网-中国股票指数-行情数据\n",
    "\n",
    "限量: 单次返回具体指数指定 period 从 start_date 到 end_date 的之间的近期数据\n",
    "\n",
    "输入参数\n",
    "\n",
    "名称\t类型\t描述\n",
    "\n",
    "symbol\tstr\tsymbol=\"399282\"; 指数代码，此处不用市场标识\n",
    "\n",
    "period\tstr\tperiod=\"daily\"; choice of {'daily', 'weekly', 'monthly'}\n",
    "\n",
    "start_date\tstr\tstart_date=\"19700101\"; 开始日期\n",
    "\n",
    "end_date\tstr\tend_date=\"22220101\"; 结束时间"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [],
   "source": [
    "stock_xinan=ak.stock_zh_a_hist(symbol=\"600596\", period=\"daily\", start_date=\"20140101\", end_date='20141231', \n",
    "                     adjust=\"hfq\")[[\"日期\",\"收盘\"]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [],
   "source": [
    "index_zh = ak.index_zh_a_hist(symbol=\"000902\", period=\"daily\", start_date=\"20140101\", \n",
    "                                        end_date='20141231')[[\"日期\",\"收盘\"]]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [],
   "source": [
    "zh_xinan=pd.merge(index_zh,stock_xinan,on=\"日期\",how=\"left\").fillna(method=\"ffill\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1e13239e790>]"
      ]
     },
     "execution_count": 81,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(Rm,Rq,\"o\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [],
   "source": [
    "import statsmodels.api as sm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<table class=\"simpletable\">\n",
       "<caption>OLS Regression Results</caption>\n",
       "<tr>\n",
       "  <th>Dep. Variable:</th>          <td>xinan</td>      <th>  R-squared:         </th> <td>   0.241</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Model:</th>                   <td>OLS</td>       <th>  Adj. R-squared:    </th> <td>   0.238</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Method:</th>             <td>Least Squares</td>  <th>  F-statistic:       </th> <td>   76.82</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Date:</th>             <td>Wed, 22 Mar 2023</td> <th>  Prob (F-statistic):</th> <td>3.36e-16</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Time:</th>                 <td>22:04:15</td>     <th>  Log-Likelihood:    </th> <td>  623.10</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>No. Observations:</th>      <td>   244</td>      <th>  AIC:               </th> <td>  -1242.</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Df Residuals:</th>          <td>   242</td>      <th>  BIC:               </th> <td>  -1235.</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Df Model:</th>              <td>     1</td>      <th>                     </th>     <td> </td>   \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Covariance Type:</th>      <td>nonrobust</td>    <th>                     </th>     <td> </td>   \n",
       "</tr>\n",
       "</table>\n",
       "<table class=\"simpletable\">\n",
       "<tr>\n",
       "     <td></td>       <th>coef</th>     <th>std err</th>      <th>t</th>      <th>P>|t|</th>  <th>[0.025</th>    <th>0.975]</th>  \n",
       "</tr>\n",
       "<tr>\n",
       "  <th>const</th>  <td>   -0.0014</td> <td>    0.001</td> <td>   -1.161</td> <td> 0.247</td> <td>   -0.004</td> <td>    0.001</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>zhongz</th> <td>    0.9527</td> <td>    0.109</td> <td>    8.765</td> <td> 0.000</td> <td>    0.739</td> <td>    1.167</td>\n",
       "</tr>\n",
       "</table>\n",
       "<table class=\"simpletable\">\n",
       "<tr>\n",
       "  <th>Omnibus:</th>       <td>47.677</td> <th>  Durbin-Watson:     </th> <td>   1.989</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Prob(Omnibus):</th> <td> 0.000</td> <th>  Jarque-Bera (JB):  </th> <td> 231.048</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Skew:</th>          <td> 0.646</td> <th>  Prob(JB):          </th> <td>6.74e-51</td>\n",
       "</tr>\n",
       "<tr>\n",
       "  <th>Kurtosis:</th>      <td> 7.589</td> <th>  Cond. No.          </th> <td>    89.8</td>\n",
       "</tr>\n",
       "</table><br/><br/>Notes:<br/>[1] Standard Errors assume that the covariance matrix of the errors is correctly specified."
      ],
      "text/plain": [
       "<class 'statsmodels.iolib.summary.Summary'>\n",
       "\"\"\"\n",
       "                            OLS Regression Results                            \n",
       "==============================================================================\n",
       "Dep. Variable:                  xinan   R-squared:                       0.241\n",
       "Model:                            OLS   Adj. R-squared:                  0.238\n",
       "Method:                 Least Squares   F-statistic:                     76.82\n",
       "Date:                Wed, 22 Mar 2023   Prob (F-statistic):           3.36e-16\n",
       "Time:                        22:04:15   Log-Likelihood:                 623.10\n",
       "No. Observations:                 244   AIC:                            -1242.\n",
       "Df Residuals:                     242   BIC:                            -1235.\n",
       "Df Model:                           1                                         \n",
       "Covariance Type:            nonrobust                                         \n",
       "==============================================================================\n",
       "                 coef    std err          t      P>|t|      [0.025      0.975]\n",
       "------------------------------------------------------------------------------\n",
       "const         -0.0014      0.001     -1.161      0.247      -0.004       0.001\n",
       "zhongz         0.9527      0.109      8.765      0.000       0.739       1.167\n",
       "==============================================================================\n",
       "Omnibus:                       47.677   Durbin-Watson:                   1.989\n",
       "Prob(Omnibus):                  0.000   Jarque-Bera (JB):              231.048\n",
       "Skew:                           0.646   Prob(JB):                     6.74e-51\n",
       "Kurtosis:                       7.589   Cond. No.                         89.8\n",
       "==============================================================================\n",
       "\n",
       "Notes:\n",
       "[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.\n",
       "\"\"\""
      ]
     },
     "execution_count": 82,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model = sm.OLS((Rq-Rf), sm.add_constant(Rm-Rf))\n",
    "result = model.fit()\n",
    "result.summary()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x1e131fb4c40>]"
      ]
     },
     "execution_count": 84,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [],
   "source": [
    "#ak.stock_zh_index_daily(symbol=\"sz399552\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>日期</th>\n",
       "      <th>收盘</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2021-02-01</td>\n",
       "      <td>48.11</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2021-02-02</td>\n",
       "      <td>48.13</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2021-02-03</td>\n",
       "      <td>49.98</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2021-02-04</td>\n",
       "      <td>51.01</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2021-02-05</td>\n",
       "      <td>48.63</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>477</th>\n",
       "      <td>2023-01-19</td>\n",
       "      <td>32.72</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>478</th>\n",
       "      <td>2023-01-20</td>\n",
       "      <td>33.15</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>479</th>\n",
       "      <td>2023-01-30</td>\n",
       "      <td>33.20</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>480</th>\n",
       "      <td>2023-01-31</td>\n",
       "      <td>33.71</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>481</th>\n",
       "      <td>2023-02-01</td>\n",
       "      <td>33.73</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>482 rows × 2 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "             日期     收盘\n",
       "0    2021-02-01  48.11\n",
       "1    2021-02-02  48.13\n",
       "2    2021-02-03  49.98\n",
       "3    2021-02-04  51.01\n",
       "4    2021-02-05  48.63\n",
       "..          ...    ...\n",
       "477  2023-01-19  32.72\n",
       "478  2023-01-20  33.15\n",
       "479  2023-01-30  33.20\n",
       "480  2023-01-31  33.71\n",
       "481  2023-02-01  33.73\n",
       "\n",
       "[482 rows x 2 columns]"
      ]
     },
     "execution_count": 77,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pa=ak.stock_zh_a_hist(symbol=\"000902\", period=\"daily\", start_date=\"20210201\", end_date='20230201', \n",
    "                     adjust=\"hfq\")[[\"日期\",\"收盘\"]]\n",
    "pa"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 怎样看待这些投资理论"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.9"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {
    "height": "calc(100% - 180px)",
    "left": "10px",
    "top": "150px",
    "width": "245.76px"
   },
   "toc_section_display": true,
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
